package com.zhongwang.business.module.contractManage.dao;

import com.zhongwang.business.module.contractManage.model.ConContractFundModel;
import com.zhongwang.business.module.contractManage.model.ConContractMainModel;
import com.zhongwang.business.module.contractManage.model.ContractModel;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 合同表的sql
 */
@Repository
public interface ConContractMainDao {
    /**
     * 合同主表的添加
     * @param model
     * @return
     */
    int addConContractMain(ConContractMainModel model);

    /**
     * 合同款项的添加
     * @param model
     * @return
     */
    int addConContractFund(ConContractFundModel model);

    /**
     * 获得合同的临时主键
     * @param model
     * @return
     */
    int getDraftConId(ConContractMainModel model);

    /**
     * 修改合同的基本信息
     * @param model
     * @return
     */
    int updConContractMain(ConContractMainModel model);

    /**
     * 删除合同下面的全部款项
     * @param fkContId
     * @return
     */
    int delConContractFundById(Integer fkContId);

    /**
     * 查询合同的信息
     * @param id
     * @return
     */
    ConContractMainModel selConContractMain(Integer id);

    /**
     * 查询合同款项,机械方的；
     * @param id
     * @return
     */
    List<ConContractFundModel> selConFun(Integer id);

    /**
     * 合同最后的款项
     * @param id
     * @return
     */
    List<ConContractFundModel> selConFunEnd(Integer id);
    /**
     * 查询合同款项,总包方的；
     * @param id
     * @return
     */
    List<ConContractFundModel> selConFunOfAll(Integer id);
    /**
     * 合同最后的款项，总包方的；
     * @param id
     * @return
     */
    List<ConContractFundModel> selConFunOfAllEnd(Integer id);

    /**
     * 修改合同的状态
     * @param model
     * @return
     */
    int updConContractMainStatus(ConContractMainModel model);

    /**
     * 删除
     * @param model
     * @return
     */
    int updConContractMaindDelStatus(ConContractMainModel model);

    /**
     * 添加审核明细
     * @param model
     * @return
     */
    int addSheetDetail(ConContractMainModel model);
    /**
     * 查询是否提交过
     */
    ConContractMainModel selectSheetDetail(int id);
    /**
     * 生成待审批记录
     * @param model
     * @return
     */
    int addVerifyProcess(ConContractMainModel model);

    /**
     * 查询流程的信息
     * @param orderNo
     * @return
     */
    List<ConContractMainModel> selAppNodeInfo(int orderNo);

    List<ConContractMainModel> selAppPreNodeInfo(int orderNo);

    /**
     * 查询当前的人，是在审批流程的哪个节点上。
     * @param uid
     * @return
     */
    List<ConContractMainModel> selAppNodeInfoByUserId(int uid);

    /**
     * 查询我当前人员账号的父级id
     * @param id
     * @return
     */
    int selNowLevelByUserId(int id);

    /**
     * 获取父级id的审批级别、人员id
     * @param id
     * @return
     */
    ConContractMainModel selNextLevelUserByPId(int id);

    /**
     * 获取孩子id的审批级别、人员id
     * @param id
     * @return
     */
    ConContractMainModel selNextUserByNgInfo(int id);

    /**
     * 待审批列表
     * @param model
     * @return
     */
    List<ConContractMainModel> unAppContractList(ConContractMainModel model);

    /**
     * 待创建增补协议列表
     * @param model
     * @return
     */
    List<ConContractMainModel> appendContractList(ConContractMainModel model);

    /**
     * 修改审批记录
     * @param model
     * @return
     */
    int updVerifyProcess(ConContractMainModel model);

    /**
     * 当前的审批节点的信息
     * @param id
     * @return
     */
    ConContractMainModel selectVerifyProcess(int id);

    /**
     * 修改合同状态
     * @param model
     * @return
     */
    int updContractStatuse(ConContractMainModel model);

    /**
     * 根据审批记录表的id ，自动生成回款项
     * @param id
     */
    void makeMoneyFund(int id);

    /**
     * 根据审批记录表的id ，更新任务完成的状态
     * @param id
     * @return
     */
    int updTaskstatuse(int id);
    /**
     * 合同审批通过以后，更新发票的进度和开始时间
     * @param id
     * @return
     */
    int updTaskKPStatuse(int id);

    /**
     * 根据合同id，任务表的执行人和开始时间
     * @param model
     * @return
     */
    int updTaskBeginAndUser(ConContractMainModel model);

    /**
     * 审批历史记录
     * @param id 合同id
     * @return
     */
    List<ConContractMainModel> selAppList(Integer id);

    List<ConContractMainModel> selectContractList(ConContractMainModel model);

    List<ConContractMainModel> selAllContract(ConContractMainModel model);

    List<ContractModel> selAllContractSearch(ContractModel model);
    /**
     * 根据审批记录的id，判断是否增补合同。
     * @param id
     * @return
     */
    ConContractMainModel selIsAppendContract(Integer id);

    int deleteReturnMoneyInfo(Integer id);

    int addNewReturnMoneyInfo(Integer id);

    /**
     * 查看全部的增补协议
     * @return
     */
    List<ConContractMainModel> selectAppConList(Integer id);

    /**
     * 修改合同状态
     * @param model
     * @return
     */
    int updContWay(ConContractMainModel model);

    /**
     * 查询人名集合
     * @return
     */
    List<ConContractMainModel> selUser();

    /**
     * 修改人名
     * @param model
     * @return
     */
    int updateName(ConContractMainModel model);
}
